template("gen_decision_forest") {
  model = invoker.model
  filename = invoker.filename
  cpp_class = invoker.cpp_class
  if (defined(invoker.deps)) {
    extra_deps = invoker.deps
  } else {
    extra_deps = []
  }

  action("${target_name}Cpp") {
    script = "//clang-tools-extra/clangd/quality/CompletionModelCodegen.py"
    outputs = [
      "$target_gen_dir/$filename.cpp",
      "$target_gen_dir/$filename.h",
    ]
    inputs = [
      "$model/features.json",
      "$model/forest.json",
    ]
    args = [
      "--model",
      rebase_path(model, root_build_dir),
      "--output_dir",
      rebase_path(target_gen_dir, root_build_dir),
      "--filename",
      filename,
      "--cpp_class",
      cpp_class,
    ]
  }

  config("${target_name}Config") {
    cflags = [ "-Wno-unused-label" ]
  }

  source_set(target_name) {
    configs += [
      "//llvm/utils/gn/build:clang_code",
      ":${target_name}Config",
    ]
    deps = [ ":${target_name}Cpp" ] + extra_deps
    include_dirs = [ "." ]
    sources = get_target_outputs(":${target_name}Cpp")
  }
}
